#!/bin/bash

#Actualizacion de Lista Maestra de Saldos
#Trabajo Práctico 
#2do cuatrimestre 2014
#FIUBA

#funcion para logear#
function log() {
        command=$1
        message=$2 
        type=$3
       if [ $# -ge 2 ] && [ $# -le 3 ] 
      then
			Logging.sh "$command" "$message" "$type" 
       fi
}

function obtenerCBU (){
				CBUAUX=""
				parametro1=$1
				parametro2=$2
				parametro3=$3
				#echo -e "$1 $2 $3\n"
				numero=$(echo $parametro1 | grep '^[0-9]*$')
				#echo -e "numero --->$numero , formato_cbu --->$formato_cbu\n"
				if [ $numero -eq 1 ]; then

					CBU1=$(echo "$parametro2" | cut -f"$parametro3" -d";")
					CBUAUX+=$CBU1
				
					else if [ $numero -eq 2 ]; then

						CBU1=$(echo "$parametro2" | cut -f"$parametro3" -d";")
						let parametro3=parametro3+1 
						CBU2=$(echo "$parametro2" | cut -f"$parametro3" -d";")
						CBUAUX+=$CBU1
						CBUAUX+=$CBU2
	
						else if [ $numero -eq 5 ]; then

							CBU1=$(echo "$parametro2" | cut -f"$parametro3" -d";")
							let parametro3=parametro3+1 
							CBU2=$(echo "$parametro2" | cut -f"$parametro3" -d";")
							let parametro3=parametro3+1 	
							CBU3=$(echo "$parametro2" | cut -f"$parametro3" -d";")
							let parametro3=parametro3+1 
							CBU4=$(echo "$parametro2" | cut -f"$parametro3" -d";")
							let parametro3=parametro3+1 
							CBU5=$(echo "$parametro2" | cut -f"$parametro3" -d";")
							CBUAUX+=$CBU1
							CBUAUX+=$CBU2
							CBUAUX+=$CBU3
							CBUAUX+=$CBU4
							CBUAUX+=$CBU5

						fi
					fi
				fi
		echo "$CBUAUX"
}

#Directorios#
#MAEDIR=MAEDIR
#ACEPDIR=ACEPDIR
SOLDES="$MAEDIR/soldes"
BANCOSDIR=$MAEDIR
PROCESADOS="$ACEPDIR/proc"
VIEUX="$SOLDES/vieux"
COMANDO="Fsoldes.sh"


#CUENTO LA CANTIDAD DE ARCHIVOS A PROCESAR#
archivos=$(ls -1p $ACEPDIR | grep -v /\$ | egrep "[^~]$"|grep '^[A-Za-z0-9]*_[0-9]\{8\}$' )
viejoIFS=$IFS 			#guardo el IFS actual
IFS=$'\n' 				#pongo como IFS sólo el new line
vector=($archivos) 		#creo el vector separando sólo con el IFS
IFS=$viejoIFS 			#restauro el IFS anterior
cantidad=${#vector[@]}  #guardo la cantidad de archivos a procesar

#Loggeo#

lineaLog="Inicio de Fsoldes"
log "Fsoldes.sh" "$lineaLog" "I"
lineaLog=""
lineaLog="Archivos de saldos a procesar: $archivos"
log "Fsoldes.sh" "$lineaLog" "I"
lineaLog=""



#chequeo el archivo soldes.tab#
if [ ! -f $SOLDES/soldes.tab ]; then 
	#TODO no loggear#
	#echo -e " creando soldes.tab \n"
	>$SOLDES/soldes.tab
fi
#chequeo el archivo soldes.lis#
if [ ! -f $SOLDES/soldes.lis ]; then
	#TODO no loggear#
	#echo -e " creando soldes.lis \n"
	>$SOLDES/soldes.lis
fi

#COMIENZO DEL PROCESO#

for archivo in ${vector[@]}
do
	#inicializacion#
	let alta=0
	let reemplazo=0

  	#COMPRUEBO SI FUE YA PROCESADO
 	if [ -f $PROCESADOS/$archivo ]; then
		lineaLog="El archivo: $archivo ya fue procesado.."
		log "Fsoldes.sh" "$lineaLog" "I"
		lineaLog=""
		lineaLog="... moviendo a RECHDIR ... "
		log "Fsoldes.sh" "$lineaLog" "I"
		lineaLog=""
		Mover.sh $PROCESADOS/$archivo $RECHDIR 
	else
		lineaLog="Archivo a procesar: $archivo"
		log "Fsoldes.sh" "$lineaLog" "I"
		lineaLog=""
		#separo el nombre en banco y fecha#
		bancoArchivo=$(echo "$archivo" | cut -f1 -d"_")
		fechaArchivo=$(echo "$archivo" | cut -f2 -d"_")
		#echo -e "$bancoArchivo\n"
		#echo -e "$fechaArchivo\n"
		#valido fecha#
		date -d "$fechaArchivo" "+%Y/%m/%d" > /dev/null 2>&1
		valid=$?
		if [ $valid -eq 1 ];then
			lineaLog="Archivo con fecha inválida"
			log "Fsoldes.sh" "$lineaLog" "I"
			lineaLog=""
			lineaLog="... moviendo a RECHDIR ..."
			log "Fsoldes.sh" "$lineaLog" "I"	
			lineaLog=""
			Mover.sh $PROCESADOS/$archivo $RECHDIR 			
			continue
		fi
		#HASTA ACA ESTA PROBADO!! >>>#
		#COMPRUEBO SI EXISTE soldes.tab#
		if [ -f $SOLDES/soldes.tab ]; then #TODO sacar ya esta verificado arriba
			#existe soldes.tab#
			#extraigo la linea correspondiente al BANCO#
			linea=$(grep "$bancoArchivo;*;*" $SOLDES/soldes.tab)
			if [ -z "$linea" ]; then
				#TODO ALTA #
				let alta=1		
				lineaBanco=$(grep "$bancoArchivo;*;*;*;*;*" $MAEDIR/bancos.dat) #obtengo la linea correspondiente al banco
				codigo_entidad=$(echo "$lineaBanco" | cut -f2 -d";")	
				descripcion_entidad=$(echo "$lineaBanco" | cut -f3 -d";")
				ubicacion_cbu=$(echo "$lineaBanco" | cut -f4 -d";")
				ubicacion_saldo=$(echo "$lineaBanco" | cut -f5 -d";")
				formato_cbu=$(echo "$lineaBanco" | cut -f6 -d";")
				#echo -e "$alta"
				#echo -e "$lineaBanco\n"
				#echo -e "$bancoArchivo;$codigo_entidad;$descripcion_entidad;$ubicacion_cbu;$ubicacion_saldo;$formato_cbu"
				#continue			
			else
				#obtengo la fecha de la linea#
				ultimaFecha=$(echo "$linea" | cut -f3 -d";")
				#obtengo la diferencia de las fechas#
				#echo -e "$ultimaFecha\n"
				diferencia=$(( ($(date --date "$fechaArchivo" +%s) - $(date --date "$ultimaFecha" +%s) )/(60*60*24) ))
				#echo -e "Diferencia: $DIFERENCIA\n"
				#chequeo de fecha#
				if [ $diferencia -eq 0 ]; then
					lineaLog="Archivo duplicado. Se rechaza el archivo."
					log "Fsoldes.sh" "$lineaLog" "I"
					lineaLog=""
					lineaLog="... moviendo a RECHDIR ..."
					log "Fsoldes.sh" "$lineaLog" "I"
					lineaLog=""
					Mover.sh $PROCESADOS/$archivo $RECHDIR 
					continue
				fi
				if [ $diferencia -lt 0 ]; then
					lineaLog="Fecha del Archivo anterior a la existente. Se rechaza el archivo."
					log "Fsoldes.sh" "$lineaLog" "I"
					lineaLog=""
					lineaLog"... moviendo a RECHDIR ..."
					log "Fsoldes.sh" "$lineaLog" "I"
					lineaLog=""
					Mover.sh $PROCESADOS/$archivo $RECHDIR
					continue
				fi
				if [ $diferencia -gt 0 ]; then
					#TODO: REEMPLAZO
					let reemplazo=1	
					if [ -f $MAEDIR/bancos.dat ]; then #existe bancos.dat
						#TODO CHEQUEAR VALORES
						lineaBanco=$(grep "$bancoArchivo;*;*;*;*;*" $MAEDIR/bancos.dat) #obtengo la linea correspondiente al banco
						codigo_entidad=$(echo "$lineaBanco" | cut -f2 -d";")	
						descripcion_entidad=$(echo "$lineaBanco" | cut -f3 -d";")
						ubicacion_cbu=$(echo "$lineaBanco" | cut -f4 -d";")
						ubicacion_saldo=$(echo "$lineaBanco" | cut -f5 -d";")
						formato_cbu=$(echo "$lineaBanco" | cut -f6 -d';')

					else
						echo -e "no existe bancos.dat"
					fi
				fi
			fi
		fi
		########### ALTA/REEMPLAZO #############
		#echo -e "alta -->$alta\n"
		registrosAceptados=0
		registrosLeidos=0
		registrosEliminados=0
		registrosRechazados=0
		if [ $alta -eq 1 ]; then
			#leo linea por linea el archivo a procesar#
			while read line
			do
				#obtengo el cbu#
				let registrosLeidos=registrosLeidos+1
				let cantidadDigitos=0
				let cbuValido=0
				CBU=""

				#echo -e "$formato_cbu $line $ubicacion_cbu\n"
				#obtenerCBU "$formato_cbu" "$line" "$ubicacion_cbu"
				CBU=$(obtenerCBU "$formato_cbu" "$line" "$ubicacion_cbu")
				#CBU=$?
				#echo -e "$CBU\n"
				cantidadDigitos=$(echo ${#CBU})
				#echo -e "cantidad de digitos--->$cantidadDigitos\n"
				if [ $cantidadDigitos -eq 22 ]; then
					let cbuValido=1
				fi
				if [ $cbuValido -eq 0 ]; then
					#TODO mover para mas adelante# HECHO
					lineaLog="ERROR en el CBU. Registro original: $line"
					log "Fsoldes.sh" "$lineaLog" "I"
					lineaLog=""
					lineaLog="Se rechaza el registro."
					log "Fsoldes.sh" "$lineaLog" "I"
					lineaLog=""					
					let registrosRechazados=registrosRechazados+1
					continue
				fi

				#### ARMANDO REGISTRO SOLDES.LIS
				#TODO Crear archivos Soldes.lis y soldes.tab HECHO
				let registrosAceptados=registrosAceptados+1
				saldo=$(echo "$line" | cut -f"$ubicacion_saldo" -d";")
				registroSoldesLis=""
				registroSoldesLis+=$codigo_entidad
				registroSoldesLis+=";"
				registroSoldesLis+=$archivo
				registroSoldesLis+=";"
				registroSoldesLis+=$CBU
				registroSoldesLis+=";"
				registroSoldesLis+=$saldo #TODO obtener saldo HECHO
				#echo -e "registro-->$registroSoldesLis\n"

				#TODO MOVER ARCHIVOS PARA RESGUARDAR
				HOY=$(date +%Y-%m-%d-%H:%M:%s)
				cat "$SOLDES/soldes.lis" >> "$SOLDES/soldes.lis.$HOY"
				Mover.sh $SOLDES/soldes.lis.$HOY $SOLDES/vieux 
				echo $registroSoldesLis >> $SOLDES/soldes.lis
				
				
			done <$ACEPDIR/$archivo		

			#ACTUALIZA EL SOLDES.TAB#
			registroSoldesTab=""
			registroSoldesTab+=$codigo_entidad
			registroSoldesTab+=";"
			registroSoldesTab+=$bancoArchivo
			registroSoldesTab+=";"
			registroSoldesTab+=$fechaArchivo
			HOY=$(date +%Y-%m-%d-%H:%M:%s)
			cat "$SOLDES/soldes.tab" >> "$SOLDES/soldes.tab.$HOY"
			Mover.sh $SOLDES/soldes.tab.$HOY $SOLDES/vieux 
			echo $registroSoldesTab >> $SOLDES/soldes.tab
					
		fi
		 
		if [ $reemplazo -eq 1 ]; then
			lineasActuales=0
			lineasFinal=0
			lineasActuales=$(cat $SOLDES/soldes.lis | wc -l)

			sed "/^$codigo_entidad;*/ d" <$SOLDES/soldes.lis>$SOLDES/aux.txt
		        rm $SOLDES/soldes.lis
     	                mv $SOLDES/aux.txt $SOLDES/soldes.lis
			lineasFinal=$(cat $SOLDES/soldes.lis | wc -l)

			#echo -e " lineas Actuales -> $lineasActuales lineas final --> $lineasFinal\n"
			let registrosEliminados=lineasActuales-lineasFinal

			while read line
			do
				#echo "reemplazo"
				let registrosLeidos=registrosLeidos+1
				let cantidadDigitos=0
				let cbuValido=0
				CBU=""
				CBU=$(obtenerCBU "$formato_cbu" "$line" "$ubicacion_cbu")
				#CBU=$?
				#echo -e "$CBU\n"
				cantidadDigitos=$(echo ${#CBU})
				#echo -e "cantidad de digitos--->$cantidadDigitos\n"
				if [ $cantidadDigitos -eq 22 ]; then
					let cbuValido=1
				fi
				if [ $cbuValido -eq 0 ]; then
						#TODO mover para mas adelante# HECHO
						lineaLog="ERROR en el CBU. Registro original: $line"
						log "Fsoldes.sh" "$lineaLog" "I"
						lineaLog=""
						lineaLog="Se rechaza el registro."
						log "Fsoldes.sh" "$lineaLog" "I"
						lineaLog=""
						let registrosRechazados=registrosRechazados+1
						continue
				fi
				#### ARMANDO REGISTRO SOLDES.LIS
				#TODO Crear archivos Soldes.lis y soldes.tab HECHO
				let registrosAceptados=registrosAceptados+1
				saldo=$(echo "$line" | cut -f"$ubicacion_saldo" -d";")
				registroSoldesLis=""
				registroSoldesLis+=$codigo_entidad
				registroSoldesLis+=";"
				registroSoldesLis+=$archivo
				registroSoldesLis+=";"
				registroSoldesLis+=$CBU
				registroSoldesLis+=";"
				registroSoldesLis+=$saldo #TODO obtener saldo HECHO
				#echo -e "registro-->$registroSoldesLis\n"

				#TODO MOVER ARCHIVOS PARA RESGUARDAR
				HOY=$(date +%Y-%m-%d-%H:%M:%s)
				cat $SOLDES/soldes.lis >> $SOLDES/soldes.lis.$HOY
				Mover.sh $SOLDES/soldes.lis.$HOY $SOLDES/vieux  
				echo $registroSoldesLis >> $SOLDES/soldes.lis
				
				
			done <$ACEPDIR/$archivo		
			sed "/^$codigo_entidad;*/ d" <$SOLDES/soldes.tab>$SOLDES/aux.txt
		    rm $SOLDES/soldes.tab
     	    mv $SOLDES/aux.txt $SOLDES/soldes.tab
			#ACTUALIZA EL SOLDES.TAB#
			registroSoldesTab=""
			registroSoldesTab+=$codigo_entidad
			registroSoldesTab+=";"
			registroSoldesTab+=$bancoArchivo
			registroSoldesTab+=";"
			registroSoldesTab+=$fechaArchivo

			HOY=$(date +%Y-%m-%d-%H:%M:%s)
			cat $SOLDES/soldes.tab >> $SOLDES/soldes.tab.$HOY
			Mover.sh $SOLDES/soldes.tab.$HOY $SOLDES/vieux
			echo $registroSoldesTab >> $SOLDES/soldes.tab
		fi
	fi
lineaLog="registros Leidos--> $registrosLeidos registros Aceptados--> $registrosAceptados"
log "Fsoldes.sh" "$lineaLog" "I"
lineaLog=""
lineaLog="registros Eliminados--> $registrosEliminados registros Rechazados--> $registrosRechazados"
log "Fsoldes.sh" "$lineaLog" "I"
lineaLog=""

Mover.sh $ACEPDIR/$archivo $PROCESADOS

done

lineaLog="Fin de Fsoldes"
log "Fsoldes.sh" "$lineaLog" "I"


